﻿<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:local="clr-namespace:NETXPF.WPF"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <SolidColorBrush x:Key="SolidBlack" Color="Black"/>
    <SolidColorBrush x:Key="SolidSilver" Color="Silver"/>

    <!--Brushes-->
    <!-- Fill Brushes -->

    <LinearGradientBrush x:Key="NormalBrush" StartPoint="0,0" EndPoint="0,1">
        <GradientBrush.GradientStops>
            <GradientStopCollection>
                <GradientStop Color="#FFF" Offset="0.0"/>
                <GradientStop Color="#CCC" Offset="1.0"/>
            </GradientStopCollection>
        </GradientBrush.GradientStops>
    </LinearGradientBrush>

    <LinearGradientBrush x:Key="DarkBrush" StartPoint="0,0" EndPoint="0,1">
        <GradientBrush.GradientStops>
            <GradientStopCollection>
                <GradientStop Color="#FFF" Offset="0.0"/>
                <GradientStop Color="#AAA" Offset="1.0"/>
            </GradientStopCollection>
        </GradientBrush.GradientStops>
    </LinearGradientBrush>

    <LinearGradientBrush x:Key="PressedBrush" StartPoint="0,0" EndPoint="0,1">
        <GradientBrush.GradientStops>
            <GradientStopCollection>
                <GradientStop Color="#BBB" Offset="0.0"/>
                <GradientStop Color="#EEE" Offset="0.1"/>
                <GradientStop Color="#EEE" Offset="0.9"/>
                <GradientStop Color="#FFF" Offset="1.0"/>
            </GradientStopCollection>
        </GradientBrush.GradientStops>
    </LinearGradientBrush>

    <SolidColorBrush x:Key="DisabledForegroundBrush" Color="#888" />

    <SolidColorBrush x:Key="DisabledBackgroundBrush" Color="#EEE" />

    <SolidColorBrush x:Key="WindowBackgroundBrush" Color="#FFF" />

    <SolidColorBrush x:Key="SelectedBackgroundBrush" Color="#DDD" />

    <!-- Border Brushes -->

    <LinearGradientBrush x:Key="NormalBorderBrush" StartPoint="0,0" EndPoint="0,1">
        <GradientBrush.GradientStops>
            <GradientStopCollection>
                <GradientStop Color="#CCC" Offset="0.0"/>
                <GradientStop Color="#444" Offset="1.0"/>
            </GradientStopCollection>
        </GradientBrush.GradientStops>
    </LinearGradientBrush>

    <LinearGradientBrush x:Key="HorizontalNormalBorderBrush" StartPoint="0,0" EndPoint="1,0">
        <GradientBrush.GradientStops>
            <GradientStopCollection>
                <GradientStop Color="#CCC" Offset="0.0"/>
                <GradientStop Color="#444" Offset="1.0"/>
            </GradientStopCollection>
        </GradientBrush.GradientStops>
    </LinearGradientBrush>

    <LinearGradientBrush x:Key="PressedBorderBrush" StartPoint="0,0" EndPoint="0,1">
        <GradientBrush.GradientStops>
            <GradientStopCollection>
                <GradientStop Color="#444" Offset="0.0"/>
                <GradientStop Color="#888" Offset="1.0"/>
            </GradientStopCollection>
        </GradientBrush.GradientStops>
    </LinearGradientBrush>

    <SolidColorBrush x:Key="DisabledBorderBrush" Color="#AAA" />

    <SolidColorBrush x:Key="SolidBorderBrush" Color="#888" />

    <SolidColorBrush x:Key="LightBorderBrush" Color="#AAA" />

    <!-- Miscellaneous Brushes -->
    <SolidColorBrush x:Key="GlyphBrush" Color="#444" />

    <SolidColorBrush x:Key="LightColorBrush" Color="#DDD" />

    <!--Converters section-->
    <local:CellSizeConverter x:Key="CellSizeConverter"/>
    <local:IsCurrentMonthConverter x:Key="IsCurrentMonthConverter"/>
    <local:MonthConverter x:Key="MonthConverter"/>

    <!--DatePicker Template-->
    <ControlTemplate x:Key="ComboBoxToggleButton" TargetType="ToggleButton">
        <Grid>
            <Border
              x:Name="Border" 
              Grid.ColumnSpan="2"
              CornerRadius="2"
              Background="{StaticResource NormalBrush}"
              BorderBrush="{StaticResource NormalBorderBrush}"
              BorderThickness="1" />
            <Path 
              x:Name="Arrow"
              Grid.Column="1"     
              Fill="{StaticResource GlyphBrush}"
              HorizontalAlignment="Center"
              VerticalAlignment="Center"
              Data="M 0 0 L 4 4 L 8 0 Z"/>
        </Grid>
        <ControlTemplate.Triggers>
            <Trigger Property="ToggleButton.IsMouseOver" Value="true">
                <Setter TargetName="Border" Property="Background" Value="{StaticResource DarkBrush}" />
            </Trigger>
            <Trigger Property="ToggleButton.IsChecked" Value="true">
                <Setter TargetName="Border" Property="Background" Value="{StaticResource PressedBrush}" />
            </Trigger>
            <Trigger Property="IsEnabled" Value="False">
                <Setter TargetName="Border" Property="Background" Value="{StaticResource DisabledBackgroundBrush}" />
                <Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource DisabledBorderBrush}" />
                <Setter Property="Foreground" Value="{StaticResource DisabledForegroundBrush}"/>
                <Setter TargetName="Arrow" Property="Fill" Value="{StaticResource DisabledForegroundBrush}" />
            </Trigger>
        </ControlTemplate.Triggers>
    </ControlTemplate>

    <ControlTemplate x:Key="BackButtonTemplate" TargetType="Button">
        <Path Fill="{StaticResource SolidBlack}"
          Stretch="Fill" Width="10" Height="10"
          Data="M388.23923,200.16536 L388.2392,212.9611 380.80291,206.08704" />
    </ControlTemplate>

    <ControlTemplate x:Key="ForwardButtonTemplate" TargetType="Button">
        <Path Fill="{StaticResource SolidBlack}"
          Stretch="Fill" Width="10" Height="10"
          Data="M144,122 L144,201.2 187.12074,157.8875 z" />
    </ControlTemplate>

    <Style x:Key="CalendarListBoxStyle" TargetType="{x:Type ListBox}">
        <Setter Property="ItemsPanel">
            <Setter.Value>
                <ItemsPanelTemplate>
                    <WrapPanel Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}, Path=ActualWidth, Converter={StaticResource CellSizeConverter}, ConverterParameter=widthCellContainer }" />
                </ItemsPanelTemplate>
            </Setter.Value>
        </Setter>
        <Setter Property="ItemContainerStyle">
            <Setter.Value>
                <Style TargetType="ListBoxItem">
                    <Setter Property="IsEnabled" Value="{Binding IsEnabled}"/>
                </Style>
            </Setter.Value>
        </Setter>
        <Setter Property="ItemTemplate">
            <Setter.Value>
                <DataTemplate>
                    <Border Width="{Binding Path=Width, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type WrapPanel}}, Converter={StaticResource CellSizeConverter}, ConverterParameter=widthCell}"
                        Height="20" >
                        <TextBlock Text="{Binding Path=DayNumber}" x:Name="dayNumberCellText" />
                    </Border>
                    <DataTemplate.Triggers>
                        <DataTrigger Value="False">
                            <DataTrigger.Binding>
                                <MultiBinding Converter="{StaticResource IsCurrentMonthConverter}">
                                    <Binding Path="MonthNumber"/>
                                    <Binding RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type local:DatePicker}}" Path="CurrentlyViewedMonth"/>
                                </MultiBinding>
                            </DataTrigger.Binding>
                            <Setter Property="Foreground" Value="{StaticResource SolidSilver}" TargetName="dayNumberCellText"/>
                        </DataTrigger>
                    </DataTemplate.Triggers>
                </DataTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <!--DateTimePicker default style-->
    <Style TargetType="{x:Type local:DatePicker}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:DatePicker}">
                    <StackPanel>
                        <Grid Name="selector">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition />
                                <ColumnDefinition MinWidth="20" Width="20"/>
                            </Grid.ColumnDefinitions>
                            <Border BorderBrush="Silver" BorderThickness="1" CornerRadius="2" Grid.ColumnSpan="2"/>
                            <TextBlock Text="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:DatePicker}}, 
                                                             Path=CurrentlySelectedDateString}" Margin="0,2,0,2"/>
                            <ToggleButton 
                                MinWidth="20"
                                Width="20"
                                Name="ToggleButton" 
                                Template="{StaticResource ComboBoxToggleButton}" 
                                Grid.Column="1" 
                                Focusable="false"
                                IsChecked="{Binding Path=IsOpen, Mode=TwoWay, ElementName=Popup}"
                                ClickMode="Press"/>
                        </Grid>
                        <Popup Name="Popup" Placement="Bottom" StaysOpen="False"
                                AllowsTransparency="True" 
                                PopupAnimation="Slide"
                                PlacementTarget="{Binding ElementName=selector}" 
                                Focusable="True">
                            <Grid Width="{TemplateBinding Width}" Name="containerGrid" MinHeight="170"
                                  Background="{TemplateBinding Background}">
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="20"/>
                                    <RowDefinition Height="20"/>
                                    <RowDefinition Height="*"/>
                                </Grid.RowDefinitions>
                                <Grid Grid.Row="0">
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="8"/>
                                        <ColumnDefinition Width="*" Name="dateColumn"/>
                                        <ColumnDefinition Width="8"/>
                                    </Grid.ColumnDefinitions>
                                    <Button Name="PART_MonthBack" Grid.Column="0" Template="{StaticResource BackButtonTemplate}" />
                                    <WrapPanel Grid.Column="1" HorizontalAlignment="Center">
                                        <ComboBox SelectedItem="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:DatePicker}}, Path=CurrentlyViewedMonth, Mode=TwoWay, Converter={StaticResource MonthConverter}}"
                                              ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:DatePicker}}, Path=MonthsList}"/>
                                        <TextBox Margin="2,0,0,0" >
                                            <TextBox.Text>
                                                <Binding Path="CurrentlyViewedYear" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged" 
                                                     RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type local:DatePicker}}">
                                                    <Binding.ValidationRules>
                                                        <local:YearValidation />
                                                    </Binding.ValidationRules>
                                                </Binding>
                                            </TextBox.Text>
                                        </TextBox>
                                    </WrapPanel>
                                    <Button Name="PART_MonthForward" Grid.Column="2" Template="{StaticResource ForwardButtonTemplate}" />
                                </Grid>

                                <Grid Grid.Row="1">
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition/>
                                        <ColumnDefinition/>
                                        <ColumnDefinition/>
                                        <ColumnDefinition/>
                                        <ColumnDefinition/>
                                        <ColumnDefinition/>
                                        <ColumnDefinition/>
                                    </Grid.ColumnDefinitions>
                                    <TextBlock Text="Sun" Grid.Column="0"/>
                                <TextBlock Text="Mon" Grid.Column="1"/>
                                <TextBlock Text="Tue" Grid.Column="2"/>
                                <TextBlock Text="Wed" Grid.Column="3"/>
                                <TextBlock Text="Thu" Grid.Column="4"/>
                                <TextBlock Text="Fri" Grid.Column="5"/>
                                <TextBlock Text="Sat" Grid.Column="6"/>
                            </Grid>
                                <ListBox Grid.Row="2" Name="PART_Dates" Style="{StaticResource CalendarListBoxStyle}"  />
                            </Grid>
                        </Popup>
                    </StackPanel>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    
</ResourceDictionary>